package com.basic.system.service;

import com.basic.common.result.WebResult;
import com.basic.system.controller.req.AddSysDeptDto;
import com.basic.system.controller.req.UpdateSysDeptDto;
import com.basic.system.controller.res.SysDeptRes;
import com.basic.system.controller.res.SysDeptVo;
import com.basic.system.dao.model.SysDept;

import java.util.List;

public interface SysDeptService {
    /***
     * 添加部门信息
     * @param addSysDeptDto  添加部门信息类
     * @return WebResult
     */
    WebResult addSysDept(AddSysDeptDto addSysDeptDto);

    /**
     * 修改部门信息
     * @param updateSysDeptDto 修改部门实体类
     * @return WebResult
     */
    WebResult updateSysDept(UpdateSysDeptDto updateSysDeptDto);

    /***
     * 根据部门id进行删除
     * @return WebResult
     */
    List<SysDeptVo> selectAll(SysDept sysDept);

    /**
     * 批量删除 根据deptId
     * @param deptIds 部门id集合
     * @return WebResult
     */
    WebResult delete(List<Long> deptIds);

    /**
     * 根据部门id假删
     * @param deptId 部门id
     * @return WebResult
     */
    WebResult markDeleted(Long deptId);

    /**
     * 根据主键查询
     * @param deptId 部门id
     * @return WebResult
     */
    WebResult selectByPrimaryKey(Long deptId);

    //搜索分类
    WebResult selectByDeptName(SysDept sysDept);

    WebResult selectAllByParam(SysDept sysDept);

    /**
     * 根据部门id查询所有同级以及子级数据
     * @param sysDept 部门
     * @return WebResult
     */
    List<SysDept> selByDept(SysDept sysDept);

    /**
     * 根据deptid查询下方所有的数据
     * @param sysDept 实体类
     * @return List<SysDeptRes>
     */
    List<SysDept> selSysDeptSubdata(SysDept sysDept);
    //只查询下级数据-仅一层
    List<SysDept> selSDsubordinate(SysDept sysDept);

    List<SysDeptRes> selectAllRes(SysDept sysDept);
}
